//
//  JHMusicDataManager.m
//  Liberty Voice
//
//  Created by dlios on 15-5-28.
//  Copyright (c) 2015年 ClearLove. All rights reserved.
//

#import "JHMusicDataManager.h"

@implementation JHMusicDataManager
+(JHMusicDataManager *)shareInstance
{
    static JHMusicDataManager *dbManager = nil;
    if (dbManager == nil) {
        dbManager = [[JHMusicDataManager alloc] init];
    }return dbManager;
}
// 打开数据库
- (void)openDB
{
    //  数据库一般存放在documents文件夹下
    //  获取document文件路径
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    //  拼接数据库路径
    NSString *dbPath = [path stringByAppendingPathComponent:@"music.db"];
    //  创建数据库
    //  检测路径下 是否已经存在数据库 如果不存在 才创建(查看sqlite3指针是否指向了数据库)
    //  参数1: 本地数据库的路径(需要UTF-8转码)
    //  参数2: 数据库指针地址
    int result = sqlite3_open([dbPath UTF8String], &dbmusic);
    NSLog(@"打开结果: %d, path: %@",result,dbPath);
}
- (void)closeDB
{
    sqlite3_close(dbmusic);
    
}


//  创建表简化方法
- (void)createTable
{
    //  1.创建SQL语句
    NSString *createSQL = @"create table if not exists music(title text, playPath32 text,num integer primary key autoincrement)";
    //  执行sql语句
    //  参数1: 数据库指针
    //  参数2: sql语句
    int result = sqlite3_exec(dbmusic, createSQL.UTF8String, NULL, NULL, nil);
    //  3判断
    if (SQLITE_OK == result) {
        NSLog(@"成功");
    }else{
        NSLog(@"失败");
    }
}
//  插入对象信息
- (void)insertInfoWithlanou:(JHgequ *)lanou
{
    //  1.创建sql语句
    NSString *insertStr = [NSString stringWithFormat:@"insert into music(title,playPath32) values('%@','%@')",lanou.title,lanou.playPath32];
    //  2.执行
    int result = sqlite3_exec(dbmusic, insertStr.UTF8String, NULL, NULL, nil);
    //  3.判断
    if (SQLITE_OK == result) {
        NSLog(@"成功");
    }else{
        NSLog(@"失败");
    }
}
//  更新对象信息
- (void)updateInfoWithlanou:(JHgequ *)lanou number:(NSInteger)num
{
    //  1.创建SQL语句
    NSString *updateSQL = [NSString stringWithFormat:@"update music set title = '%@', playPath32 = '%@' where num = '%ld'",lanou.title, lanou.playPath32, num];
    //  2.执行语句
    int result = sqlite3_exec(dbmusic, updateSQL.UTF8String, NULL, NULL, nil);
    if (SQLITE_OK == result) {
        NSLog(@"成功");
    }else{
        NSLog(@"失败");
    }
}
//  查询
- (NSMutableArray *)selectInfo
{
    //  查询操作逻辑
    //  1.从本地数据库所有信息 遍历获取每条信息
    //  2.把每条信息转化为Model对象
    //  3.把Model添加在可变数组中返回
    
    //  1.创建sql语句
    //  select * 查询所有
    NSString *selectSQL = @"select * from music";
    //  2.创建数据库替身
    sqlite3_stmt *stmt = nil;
    //  3.准备sql语句
    //  prepare_v2函数 把数据库对象/SQL语句/数据库替身 关联在一起
    int result = sqlite3_prepare_v2(dbmusic, selectSQL.UTF8String, -1, &stmt, nil);
    //  4.创建存放返回数据的信息数组
    NSMutableArray *arr = [NSMutableArray array];
    //  5.判断
    if (SQLITE_OK == result) {
        NSLog(@"成功");
        //  6.开始遍历每一行信息
        while (sqlite3_step(stmt) == SQLITE_ROW
               ) {
            //  当数据库替身指向的数据符合查询条件 在while中返回
            //  逐行 获取每一行的数据
            //  列数从0开始
            const unsigned char *title = sqlite3_column_text(stmt, 0);
            const unsigned char *playPath32 = sqlite3_column_text(stmt, 1);
            int num = sqlite3_column_int(stmt, 2);
            //  访问到数据库数据 转化添加在Model
            JHgequ *temp = [[JHgequ alloc] init];
            temp.title = [NSString stringWithUTF8String:(const char *) title];
            temp.playPath32 = [NSString stringWithUTF8String:(const char *) playPath32];
   
            temp.num = num;
            //  把Model对象添加数组中
            [arr addObject:temp];
        }
    }else{
        NSLog(@"失败");
    }
    return arr;
}
//  删除
- (void)deleteInfoWithNum:(NSString *)num
{
    //  1.创建sql语句
    NSString *deleteSQL = [NSString stringWithFormat:@"delete from music where title = '%@'",num];
    //  2.执行语句
    int result = sqlite3_exec(dbmusic, deleteSQL.UTF8String, NULL, NULL, nil);
    //  3.判断
    if (result == SQLITE_OK) {
        NSLog(@"成功");
    }else{
        NSLog(@"失败");
    }
}
// 删除表
- (void)dropTable
{
    //  1.sql语句
    NSString *dropSQL = @"drop table music";
    //  2.执行
    int result = sqlite3_exec(dbmusic, dropSQL.UTF8String, NULL, NULL, nil);
    //  判断
    if (result == SQLITE_OK) {
        NSLog(@"成功");
    }else{
        NSLog(@"失败");
    }
}

@end
